perm filename EEDIT1.2[EAL,HE]2 blob
sn#704724 filedate 1983-03-26 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 {$NOMAIN Editor: Part of the statement-editor routine }
C00005 00003 procedure eEdit1 (s: statementp l,indent,e0,elen: integer
C00010 ENDMK
C⊗;
{$NOMAIN Editor: Part of the statement-editor routine }
%include eedit.hdr;
{ Externally defined routines from elsewhere: }
(* From EAUX1B *)
function checkArg(n: nodep; d: datatypes): nodep; external;
(* From EAUX1C *)
procedure relExpr(n: nodep); external;
function evalOrder(what,last: nodep; pcons: boolean): nodep; external;
(* From EPUT *)
function getExprLength(n: nodep): integer; external;
(* From EEXPED *)
function exprEditor(line,lstart,llength,estart: integer;
var elength: integer; off: integer): ascii; external;
(* From EPAR3A *)
procedure assignParse(st: statementp); external;
procedure forParse(st: statementp); external;
(* From EPAR3B *)
function idGet(st: statementp; indent,l: integer): ascii; external;
(* From EPAR3F *)
procedure returnParse(st: statementp); external;
(* From EEDITS *)
procedure echarDo (echar: ascii; var again: boolean); external;
function editExpr(n: nodep; l,e0,elen: integer;
echar: ascii; var again: boolean): nodep; external;
procedure downLine (var again:boolean; var ocur: integer); external;
(* From PP *)
procedure pp20L(ch: c20str; length: integer); external;
procedure pp10(ch: cstring; length: integer); external;
procedure ppOutNow; external;
procedure eEdit1 (s: statementp; l,indent,e0,elen: integer;
var echar: ascii; var again: boolean; var ocur: integer); external;
procedure eEdit1;
var i: integer;
procedure goEd;
begin
with lines[l]↑ do (* go edit it *)
echar := exprEditor(l-firstDline+1,start,length,e0,elen,0);
end;
begin
with s↑ do
case stype of
blocktype,
coblocktype,
endtype,
coendtype: begin
echar := idGet(s,indent,l);
echardo(echar,again);
end;
fortype: begin
e0 := indent + 4;
with lines[l]↑ do
begin (* go edit it *)
i := length - 1;
while listing[start+i] <> 'd' do i := i - 1;
elen := i - e0;
end;
goEd;
relExpr(forvar);
relExpr(initial);
relExpr(step);
relExpr(final);
forParse(s);
echardo(echar,again);
end;
iftype: begin
if fieldNum = 1 then
begin (* edit <cond> *)
e0 := indent + 3;
icond := checkArg(editExpr(icond,l,e0,elen,echar,again),svaltype);
exprs := evalOrder(icond,nil,true);
end
else downLine(again,ocur); (* just move on to ELSE statement *)
end;
whiletype: begin (* edit <cond> *)
e0 := indent + 6;
cond := checkArg(editExpr(cond,l,e0,elen,echar,again),svaltype);
exprs := evalOrder(cond,nil,true);
end;
untiltype: begin
if fieldNum = 2 then
begin (* edit <cond> *)
e0 := indent + 6;
cond := checkArg(editExpr(cond,l,e0,elen,echar,again),svaltype);
exprs := evalOrder(cond,nil,true);
end
else downLine(again,ocur); (* just move on to body *)
end;
casetype: begin
if fieldNum = 1 then
begin (* edit <index> *)
e0 := indent + 5;
index := checkArg(editExpr(index,l,e0,elen,echar,again),svaltype);
exprs := evalOrder(index,nil,true);
end
else downLine(again,ocur); (* just move on to first case *)
end;
calltype,
assigntype: begin
e0 := indent;
elen := getExprLength(what);
if stype = assigntype then
elen := elen + getExprLength(aval) + 4;
relExpr(what);
relExpr(aval);
goEd;
assignParse(s);
echardo(echar,again);
end;
returntype: begin
e0 := indent + 7;
if retval = nil then begin e0 := e0 - 1; elen := 0 end
else elen := getExprLength(retval);
goEd;
returnParse(s);
echarDo(echar,again);
end;
otherwise begin pp20L('Oh no! Bad ovly call',20); pp10(': Edits 1 ',9);
ppOutNow; end;
end;
end;